package com.mutual.base.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 数据验证工具类
 * @create-time 2016年4月18日 下午4:11:00
 * @version     1.0
 */
public class DataValidationUtil {

	static boolean flag = false;
	static String regex = "";

	public static boolean check(String str, String regex) {
		try {
			Pattern pattern = Pattern.compile(regex);
			Matcher matcher = pattern.matcher(str);
			flag = matcher.matches();
		} catch (Exception e) {
			flag = false;
		}
		return flag;
	}
	
	/** 
     * 手机号验证 
     *  
     * @param  str 
     * @return 验证通过返回true 
     */  
    public static boolean isMobile(String str) {   
        Pattern p = null;  
        Matcher m = null;  
        boolean b = false;   
        p = Pattern.compile("^[1][3,4,5,8][0-9]{9}$"); // 验证手机号  
        m = p.matcher(str);  
        b = m.matches();   
        return b;  
    }

	/**
	 * 是否为非空
	 * 
	 * @param notEmputy
	 * @return
	 */
	public static boolean isNotEmputy(String notEmputy) {
		regex = "^\\s*$";
		return check(notEmputy, regex) ? false : true;
	}

	/**
	 * 是否是邮箱
	 * 
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email) {
		String regex = "^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$";
		return check(email, regex);
	}

	/**
	 * 是否是手机号码
	 * 
	 * 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
	 * 联通号码段:130、131、132、136、185、186、145 电信号码段:133、153、180、189
	 * 
	 * @param cellphone
	 * @return
	 */
	public static boolean isCellphone(String cellphone) {
						 
		String regex = "^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$";
		return check(cellphone, regex);
	}

	/**
	 * 是否是固话号码
	 * 
	 * @param telephone
	 * @return
	 */
	public static boolean isTelephone(String telephone) {
		String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
		return check(telephone, regex);
	}

	/**
	 * 验证传真号码
	 * 
	 * @param fax
	 * @return
	 */
	public static boolean isFax(String fax) {
		String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
		return check(fax, regex);
	}

	/**
	 * 是否是QQ号码
	 * 
	 * @param QQ
	 * @return
	 */
	public static boolean isQQ(String QQ) {
		String regex = "^[1-9][0-9]{4,} $";
		return check(QQ, regex);
	}

	/**
	 * 是否是ip地址
	 * 
	 * @param value
	 */
	public static boolean isIp(String ip) {
		String regex = "^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$";
		return check(ip, regex);
	}

	/**
	 * 是否是字母
	 * 
	 * @param value
	 */
	public static boolean isLetter(String value) {
		String regex = "^[A-Za-z]+$";
		return check(value, regex);
	}

	/**
	 * 是否是大写字母
	 * 
	 * @param value
	 */
	public static boolean isLetter_u(String value) {
		String regex = "^[A-Z]+$";
		return check(value, regex);
	}

	/**
	 * 是否是价格
	 * 
	 * @param value
	 */
	public static boolean isPrice(String value) {
		String regex = "^([1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|\\.[0-9]{1,2})$";
		return check(value, regex);
	}

	/**
	 * 是否是邮编
	 * 
	 * @param value
	 */
	public static boolean isZipcode(String value) {
		String regex = "^\\d{6}$";
		return check(value, regex);
	}

	/**
	 * 是否是中文
	 * 
	 * @param value
	 */
	public static boolean isChinese(String value) {
		String regex = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$";
		return check(value, regex);
	}

	/**
	 * 是否是url
	 * 
	 * @param value
	 */
	public static boolean isUrl(String value) {
		String regex = "^(([hH][tT][tT][pP][sS]?|[fF][tT][pP])\\:\\/\\/)?([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$";
		return check(value, regex);
	}
	
	/**
	 * 是否是密码格式：字母开头，字母数字混合8~18位
	 * @param value
	 * @return
	 */
	public static boolean isPassword(String value){
		String regex = "^(?!^\\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{8,18}$";
		return check(value,regex);
	}
	
	/**
	 * 是否是工作年限格式：从业年限只能由汉字及数字组成！
	 * @param value
	 * @return
	 */
	public static boolean isWorkingYears(String value){
		String regex = "^[\\(\\)\\（\\）0-9\u4E00-\u9FA5]+$";
		return check(value,regex);
	}
}
